package org.example.mall;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;
import org.junit.jupiter.api.Test;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class JWTtest {
    @Test
    public void testGen(){
        Map<String,Object> claims = new HashMap<String,Object>();
        //载荷表，由于base64本质只是编码而非加密，可以随意编解码，因而载荷也不应放入敏感信息
        claims.put("id",1);
        claims.put("username","zhangsan");
        //生成JWT代码
        String token = JWT.create()
                .withClaim("user",claims)//添加载荷
                .withExpiresAt(new Date(System.currentTimeMillis()+1000*60*5))//添加过期时间
                .sign(Algorithm.HMAC256("Tenshi"));//指定加密算法与密钥
        System.out.println(token);
    }
    @Test
    public void testParse(){
        //模拟用户传来的token，注意token会因为设置的超时时间而失效
        String token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9" +
                ".eyJ1c2VyIjp7ImlkIjoxLCJ1c2VybmFtZSI6InpoYW5nc2FuIn0sImV4cCI6MTcyNDkzOTA1Mn0" +
                ".XtIAJievLoDjEhvzRPhL0_wKsziNkC4H9ePMWZUBpE4";
        //申请一个验证器
        JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256("Tenshi")).build();
        //验证token，得到解析后的JWT对象
        DecodedJWT jwt = jwtVerifier.verify(token);
        Map<String, Claim> claims = jwt.getClaims();
        System.out.println(claims);
    }
}
